Made migration irreversable, support '$variable' syntax

Dominik Sander 10 gadi atpakaļ
vecāks
revīzija
da137aaeb8

+ 5 - 1
db/migrate/20140426202023_migrate_hipchat_and_ef_agent_to_liquid.rb

@@ -1,5 +1,5 @@
1 1
 class MigrateHipchatAndEfAgentToLiquid < ActiveRecord::Migration
2
-  def change
2
+  def up
3 3
     Agent.where(:type => 'Agents::HipchatAgent').each do |agent|
4 4
       LiquidMigrator.convert_all_agent_options(agent)
5 5
     end
@@ -8,4 +8,8 @@ class MigrateHipchatAndEfAgentToLiquid < ActiveRecord::Migration
8 8
       agent.save
9 9
     end
10 10
   end
11
+
12
+  def down
13
+    raise ActiveRecord::IrreversibleMigration, "Cannot revert migration to Liquid templating"
14
+  end
11 15
 end

+ 5 - 1
db/migrate/20140430215234_migrate_pushbullet_agent_to_liquid.rb

@@ -1,7 +1,11 @@
1 1
 class MigratePushbulletAgentToLiquid < ActiveRecord::Migration
2
-  def change
2
+  def up
3 3
     Agent.where(:type => 'Agents::PushbulletAgent').each do |agent|
4 4
       LiquidMigrator.convert_all_agent_options(agent)
5 5
     end
6 6
   end
7
+
8
+  def down
9
+    raise ActiveRecord::IrreversibleMigration, "Cannot revert migration to Liquid templating"
10
+  end
7 11
 end

+ 5 - 1
db/migrate/20140501183219_migrate_jabber_agent_to_liquid.rb

@@ -1,7 +1,11 @@
1 1
 class MigrateJabberAgentToLiquid < ActiveRecord::Migration
2
-  def change
2
+  def up
3 3
     Agent.where(:type => 'Agents::JabberAgent').each do |agent|
4 4
       LiquidMigrator.convert_all_agent_options(agent)
5 5
     end
6 6
   end
7
+
8
+  def down
9
+    raise ActiveRecord::IrreversibleMigration, "Cannot revert migration to Liquid templating"
10
+  end
7 11
 end

+ 5 - 1
db/migrate/20140501191849_migrate_data_output_agent_to_liquid.rb

@@ -1,7 +1,11 @@
1 1
 class MigrateDataOutputAgentToLiquid < ActiveRecord::Migration
2
-  def change
2
+  def up
3 3
     Agent.where(:type => 'Agents::DataOutputAgent').each do |agent|
4 4
       LiquidMigrator.convert_all_agent_options(agent)
5 5
     end
6 6
   end
7
+
8
+  def down
9
+    raise ActiveRecord::IrreversibleMigration, "Cannot revert migration to Liquid templating"
10
+  end
7 11
 end

+ 5 - 1
db/migrate/20140501200859_migrate_translation_agent_to_liquid.rb

@@ -1,8 +1,12 @@
1 1
 class MigrateTranslationAgentToLiquid < ActiveRecord::Migration
2
-  def change
2
+  def up
3 3
     Agent.where(:type => 'Agents::TranslationAgent').each do |agent|
4 4
       agent.options['content'] = LiquidMigrator.convert_hash(agent.options['content'], {:merge_path_attributes => true, :leading_dollarsign_is_jsonpath => true})
5 5
       agent.save
6 6
     end
7 7
   end
8
+
9
+  def down
10
+    raise ActiveRecord::IrreversibleMigration, "Cannot revert migration to Liquid templating"
11
+  end
8 12
 end

+ 5 - 1
db/migrate/20140501203828_migrate_twitter_publish_agent_to_liquid.rb

@@ -1,5 +1,5 @@
1 1
 class MigrateTwitterPublishAgentToLiquid < ActiveRecord::Migration
2
-  def change
2
+  def up
3 3
     Agent.where(:type => 'Agents::TwitterPublishAgent').each do |agent|
4 4
       if (message = agent.options.delete('message_path')).present?
5 5
         agent.options['message'] = "{{#{message}}}"
@@ -7,4 +7,8 @@ class MigrateTwitterPublishAgentToLiquid < ActiveRecord::Migration
7 7
       end
8 8
     end
9 9
   end
10
+
11
+  def down
12
+    raise ActiveRecord::IrreversibleMigration, "Cannot revert migration to Liquid templating"
13
+  end
10 14
 end

+ 6 - 2
lib/liquid_migrator.rb

@@ -52,11 +52,15 @@ module LiquidMigrator
52 52
 
53 53
   def self.convert_json_path(string, filter = "")
54 54
     check_path(string)
55
-    "{{#{string[2..-1]}#{filter}}}"
55
+    if string.start_with? '$.'
56
+      "{{#{string[2..-1]}#{filter}}}"
57
+    else
58
+      "{{#{string[1..-1]}#{filter}}}"
59
+    end
56 60
   end
57 61
 
58 62
   def self.check_path(string)
59
-    if string !~ /\A(\$\.)?(\w+\.)*(\w+)\Z/
63
+    if string !~ /\A(\$\.?)?(\w+\.)*(\w+)\Z/
60 64
       raise "JSONPath '#{string}' is too complex, please check your migration."
61 65
     end
62 66
   end

+ 2 - 0
spec/lib/liquid_migrator_spec.rb

@@ -5,10 +5,12 @@ describe LiquidMigrator do
5 5
     it "should work" do
6 6
       LiquidMigrator.convert_string("$.data", true).should == "{{data}}"
7 7
       LiquidMigrator.convert_string("$.data.test", true).should == "{{data.test}}"
8
+      LiquidMigrator.convert_string("$first_title", true).should == "{{first_title}}"
8 9
     end
9 10
 
10 11
     it "should ignore strings which just contain a JSONPath" do
11 12
       LiquidMigrator.convert_string("$.data").should == "$.data"
13
+      LiquidMigrator.convert_string("$first_title").should == "$first_title"
12 14
       LiquidMigrator.convert_string(" $.data", true).should == " $.data"
13 15
       LiquidMigrator.convert_string("lorem $.data", true).should == "lorem $.data"
14 16
     end